home *** CD-ROM | disk | FTP | other *** search
/ Stone Design / Stone Design.iso / Stone_Friends / Wave / WavesWorld / Source / IBPalettes / WW3DKit / WWArticulatedVariableBehavior.m < prev    next >
Encoding:
Text File  |  1995-05-16  |  1.3 KB  |  59 lines

  1.  
  2. #import "WWInterp.h"
  3. #import "WWArticulatedVariableBehavior.h"
  4.  
  5. @implementation WWArticulatedVariableBehavior
  6.  
  7. - initWithInterp:newInterp startTime:(float)newStartTime
  8.                            endTime:(float)newEndTime 
  9.                            var:(const char *)newVarName
  10.                            expression:(const char *)newVarValueExpression
  11. {
  12.    interp = newInterp;
  13.    startTime = newStartTime;
  14.    endTime = newEndTime;
  15.    varName = NXCopyStringBuffer(newVarName);
  16.    varValueExpression = NXCopyStringBuffer(newVarValueExpression);
  17.    cmd = (char *)malloc(12 + strlen(varName) + strlen(varValueExpression));
  18.    sprintf(cmd, "set {%s} [%s]", varName, varValueExpression);
  19.  
  20.    return self;
  21. }
  22.  
  23. - free
  24. {
  25.    if (varName) {  free(varName); }
  26.    if (varValueExpression) {  free(varValueExpression); }
  27.    if (cmd) {  free(cmd); }
  28.    return self;
  29. }
  30.  
  31. - (const char *)varName { return varName; }
  32.  
  33. - (const char *)varValueExpression { return varValueExpression; }
  34.  
  35. - evaluateSelfAtTime:(float)currentTime
  36. {
  37.    float  u;
  38.    char   uValue[256];
  39.  
  40.  
  41.    if (currentTime < startTime)
  42.    {  return self;
  43.    }
  44.    if (currentTime > endTime)
  45.    {  return self;
  46.    }
  47.  
  48.    u = (currentTime - startTime)/(endTime - startTime);
  49.    sprintf(uValue, "%f", u);
  50.    [interp setVar:"u" toValue:uValue];
  51.  
  52.    if ([interp globalEval:cmd] != TCL_OK)
  53.    {  return nil;
  54.    }
  55.    return self;
  56. }
  57.  
  58. @end
  59.